package com.tarena.lbs.basic.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tarena.lbs.basic.dao.mapper.TagMapper;
import com.tarena.lbs.basic.pojo.po.TagLibraryPO;
import com.tarena.lbs.basic.pojo.vo.TagLibraryVO;
import com.tarena.lbs.basic.pojo.vo.TagVO;
import com.tarena.lbs.basic.service.TagService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Service
public class TagServiceImpl implements TagService {
    @Autowired
    private TagMapper tagMapper;


    @Override
    public Map<String, List<TagVO>> getUserTagList() {
        Integer tagType = 1;
//        QueryWrapper<TagLibraryPO> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("tagType", tagType);
//        List<TagLibraryPO> list = tagMapper.selectList(queryWrapper);
//        List<TagVO> list1 = new ArrayList<>();
//        Map<String,  List<TagVO>> map = new HashMap<>();
//        for (TagLibraryPO tagLibraryPO : list){
//            Integer parentId = tagLibraryPO.getTagParentId();
//            if (parentId != 0){
//                QueryWrapper<TagLibraryPO> queryWrapper1 = new QueryWrapper<>();
//                queryWrapper1.eq("tagParentId", parentId);
//                TagLibraryPO po = tagMapper.selectById(parentId);
//                TagLibraryVO  tag = new TagLibraryVO();
//                BeanUtils.copyProperties(tagLibraryPO, tag);
//                TagVO tagVO = new TagVO();
//                tagVO.setTagLibraryBO(tag);
//                list1.add(tagVO);
//                map.put(po.getTagName(), list1);
//            }
//
//        }
//        return map;
        QueryWrapper<TagLibraryPO> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("tag_type", tagType);
        List<TagLibraryPO> list = tagMapper.selectList(queryWrapper);

        // 2. 收集所有需要查询的父级ID
        Set<Integer> parentIds = list.stream()
                .map(TagLibraryPO::getTagParentId)
                .filter(parentId -> parentId != 0)
                .collect(Collectors.toSet());

        // 3. 批量查询父级标签（避免N+1查询）
        Map<Integer, String> parentNameMap = new HashMap<>();
        if (!parentIds.isEmpty()) {
            List<TagLibraryPO> parents = tagMapper.selectBatchIds(parentIds);
            parents.forEach(p -> parentNameMap.put(p.getId(), p.getTagName()));
        }

        // 4. 按父级分组构建结果
        Map<String, List<TagVO>> resultMap = new HashMap<>();

        for (TagLibraryPO po : list) {
            if (po.getTagParentId() == 0) continue;

            String parentName = parentNameMap.get(po.getTagParentId());
            if (parentName == null) continue; // 父级不存在则跳过

            // 创建VO对象
            TagLibraryVO tagVO = new TagLibraryVO();
            BeanUtils.copyProperties(po, tagVO);

            TagVO wrapper = new TagVO();
            wrapper.setTagLibraryBO(tagVO);

            // 按父级名称分组
            resultMap.computeIfAbsent(parentName, k -> new ArrayList<>())
                    .add(wrapper);
        }

        return resultMap;


    }
}
